diff --git a/system/core/Common.php b/system/core/Common.php
index fda747b..677ceaf 100644
--- a/system/core/Common.php
+++ b/system/core/Common.php
@@ -45,9 +45,6 @@
 	/**
 	 * Determines if the current version of PHP is greater then the supplied value
 	 *
-	 * Since there are a few places where we conditionally test for PHP > 5.3
-	 * we'll set a static variable.
-	 *
 	 * @param	string
 	 * @return	bool	TRUE if the current version is $version or higher
 	 */
diff --git a/system/libraries/Form_validation.php b/system/libraries/Form_validation.php
index 31d7330..2f07234 100644
--- a/system/libraries/Form_validation.php
+++ b/system/libraries/Form_validation.php
@@ -223,8 +223,6 @@
 					$indexes[] = $matches[1][$i];
 				}
 			}
-
-			$is_array = TRUE;
 		}
 
 		// Build our master array
@@ -1096,19 +1094,16 @@
 	 * Check if the input value doesn't already exist
 	 * in the specified database field.
 	 *
-	 * @param	string
-	 * @param	string	field
+	 * @param	string	$str
+	 * @param	string	$field
 	 * @return	bool
 	 */
 	public function is_unique($str, $field)
 	{
 		sscanf($field, '%[^.].%[^.]', $table, $field);
-		if (isset($this->CI->db))
-		{
-			$query = $this->CI->db->limit(1)->get_where($table, array($field => $str));
-			return $query->num_rows() === 0;
-		}
-		return FALSE;
+		return isset($this->CI->db)
+			? ($this->CI->db->limit(1)->get_where($table, array($field => $str))->num_rows() === 0)
+			: FALSE;
 	}
 
 	// --------------------------------------------------------------------
@@ -1126,10 +1121,6 @@
 		{
 			return FALSE;
 		}
-		else
-		{
-			$val = (int) $val;
-		}
 
 		return (MB_ENABLED === TRUE)
 			? ($val <= mb_strlen($str))
@@ -1151,10 +1142,6 @@
 		{
 			return FALSE;
 		}
-		else
-		{
-			$val = (int) $val;
-		}
 
 		return (MB_ENABLED === TRUE)
 			? ($val >= mb_strlen($str))
@@ -1176,14 +1163,10 @@
 		{
 			return FALSE;
 		}
-		else
-		{
-			$val = (int) $val;
-		}
 
 		return (MB_ENABLED === TRUE)
-			? (mb_strlen($str) === $val)
-			: (strlen($str) === $val);
+			? (mb_strlen($str) === (int) $val)
+			: (strlen($str) === (int) $val);
 	}
 
 	// --------------------------------------------------------------------
@@ -1219,7 +1202,7 @@
 		// There's a bug affecting PHP 5.2.13, 5.3.2 that considers the
 		// underscore to be a valid hostname character instead of a dash.
 		// Reference: https://bugs.php.net/bug.php?id=51192
-		if (version_compare(PHP_VERSION, '5.2.13', '==') === 0 OR version_compare(PHP_VERSION, '5.3.2', '==') === 0)
+		if (version_compare(PHP_VERSION, '5.2.13', '==') OR version_compare(PHP_VERSION, '5.3.2', '=='))
 		{
 			sscanf($str, 'http://%[^/]', $host);
 			$str = substr_replace($str, strtr($host, array('_' => '-', '-' => '_')), 7, strlen($host));
diff --git a/system/libraries/Trackback.php b/system/libraries/Trackback.php
index 9fa4a8e..e22361e 100644
--- a/system/libraries/Trackback.php
+++ b/system/libraries/Trackback.php
@@ -44,14 +44,20 @@
 	 *
 	 * @var	string
 	 */
-	public $charset		= 'UTF-8';
+	public $charset = 'UTF-8';
 
 	/**
 	 * Trackback data
 	 *
 	 * @var	array
 	 */
-	public $data		= array('url' => '', 'title' => '', 'excerpt' => '', 'blog_name' => '', 'charset' => '');
+	public $data = array(
+		'url' => '',
+		'title' => '',
+		'excerpt' => '',
+		'blog_name' => '',
+		'charset' => ''
+	);
 
 	/**
 	 * Convert ASCII flag
@@ -61,21 +67,21 @@
 	 *
 	 * @var	bool
 	 */
-	public $convert_ascii	= TRUE;
+	public $convert_ascii = TRUE;
 
 	/**
 	 * Response
 	 *
 	 * @var	string
 	 */
-	public $response	= '';
+	public $response = '';
 
 	/**
 	 * Error messages list
 	 *
 	 * @var	string[]
 	 */
-	public $error_msg	= array();
+	public $error_msg = array();
 
 	// --------------------------------------------------------------------
 
@@ -116,18 +122,22 @@
 
 			switch ($item)
 			{
-				case 'ping_url'	: $$item = $this->extract_urls($tb_data[$item]);
+				case 'ping_url':
+					$$item = $this->extract_urls($tb_data[$item]);
 					break;
-				case 'excerpt'	: $$item = $this->limit_characters($this->convert_xml(strip_tags(stripslashes($tb_data[$item]))));
+				case 'excerpt':
+					$$item = $this->limit_characters($this->convert_xml(strip_tags(stripslashes($tb_data[$item]))));
 					break;
-				case 'url'		: $$item = str_replace('&#45;', '-', $this->convert_xml(strip_tags(stripslashes($tb_data[$item]))));
+				case 'url':
+					$$item = str_replace('&#45;', '-', $this->convert_xml(strip_tags(stripslashes($tb_data[$item]))));
 					break;
-				default			: $$item = $this->convert_xml(strip_tags(stripslashes($tb_data[$item])));
+				default:
+					$$item = $this->convert_xml(strip_tags(stripslashes($tb_data[$item])));
 					break;
 			}
 
 			// Convert High ASCII Characters
-			if ($this->convert_ascii === TRUE && in_array($item, array('excerpt', 'title', 'blog_name')))
+			if ($this->convert_ascii === TRUE && in_array($item, array('excerpt', 'title', 'blog_name'), TRUE))
 			{
 				$$item = $this->convert_ascii($$item);
 			}
@@ -301,7 +311,9 @@
 
 		if (stripos($this->response, '<error>0</error>') === FALSE)
 		{
-			$message = preg_match('/<message>(.*?)<\/message>/is', $this->response, $match) ? trim($match[1]) : 'An unknown error was encountered';
+			$message = preg_match('/<message>(.*?)<\/message>/is', $this->response, $match)
+				? trim($match[1])
+				: 'An unknown error was encountered';
 			$this->set_error($message);
 			return FALSE;
 		}
@@ -326,17 +338,10 @@
 		// Remove the pesky white space and replace with a comma, then replace doubles.
 		$urls = str_replace(',,', ',', preg_replace('/\s*(\S+)\s*/', '\\1,', $urls));
 
-		// Remove any comma that might be at the end
-		if (substr($urls, -1) === ',')
-		{
-			$urls = substr($urls, 0, -1);
-		}
-
 		// Break into an array via commas and remove duplicates
-		$urls = array_unique(preg_split('/[,]/', $urls));
+		$urls = array_unique(preg_split('/[,]/', rtrim($urls, ',')));
 
 		array_walk($urls, array($this, 'validate_url'));
-
 		return $urls;
 	}
 
